Filecoin网络:关于重量
任何创新都不是一蹴而就的,必然要经过波折、打击、完善而后被接纳。Filecoin创新地提出了链的重量的概念,使用重量法则取代比特币的最长链法则。这是一个创新,同时我们也有幸地见证这一创新逐步走向成熟。今天就来谈一谈关于重量的一些小故事。
在 Filecoin 开源不久,我花了一点时间学习 Filecoin 的共识机制。觉得很有意思,通过 VDF 来实现时间的控制,可以实现一条绿色经济的区块链,这非常前沿。不仅如此,Filecoin 创新地引入了重量机制,用以取代比特币的最长链法则,简单易行,理论上收敛快速。这些都反映了 Filecoin 团队敢为天下先,敢于尝试和创新。尽管 VDF 看起来难度还不小,但重力机制的可行性很高。
在此基础上,我有好几篇文章来向社区和爱好者介绍预期共识和相关信息。包括:
那个时候 Filecoin 开源差不多一月左右,这应该差不多算最早一批介绍 Filecoin 共识机制的了。其中的少部分内容可能放到现在不是完全准确,但仍然可以作为初步了解预期共识的初级读物。
这期间在我阅读源码时,却发现代码实现与设计不一致。因此,我与 3 月份提交了文档更新请求,希望文档能反映实际的实现,以免误导开发者。因此就有了下面这个PR:
有意思的是,Why 却不愿意修改。他的意见是,当时的关于重量计算的实现已经过时,需要修改。这里不应该是改文档,而应该改代码。也就是说,这不是文档的问题。那好,等着改代码吧。
当时的时间是3月份。
而后,Filecoin 连续出了两轮开发网版本,0.1.x 和 0.2.x。当时最沸沸扬扬的时间是有些社区成员对 0.2.2 网络采用的缩短出块时间的攻击手法对网络进行攻击致使网络不可用。(具体攻击方法参见我的分析文章 对Filecoin-0.2.2开发网络的攻击手法的分析?)
我与 Why 及 Zenground0 经过了多轮讨论,希望他们重视开发网的正常运行,这对于社区非常重要。功夫不负有心人,在0.2.4版本中他们加入了我们讨论提出的时间戳方案来恢复网络。从这一事件中,我认为社区成员要明白一件事情,那就是:Filecoin团队做事有自己的节奏,有些问题在社区看起来似乎是重要的,但对于项目而言,软件的设计和实现才是最重要的。
对于重力计算的问题,我并没有期待尽快解决。时间一天天过去,一晃到了6月份,当我和 Why、Alex在西班牙的 Campus La Mola 的草地上喝着度假村美味的自酿啤酒的时候,我问了一个问题:“目前重力的计算方式,让矿工有可乘之机,很容易可以对网络实施攻击,而这种攻击一旦被采用,又会使 0.2.2 网络相似的情况再现,网络对社区来说又不可用。他们有什么看法。”
Why 很有意思,说你们可以去做,我们希望社区发现问题。同时,他强调,具体的计算方法还在细化之中,在定稿之前,基本上都不会动。
有一些问题,没有被利用之前,优先级是不够高的,但请相信,这些问题在主网上线之前,一定会解决掉。不是团队不知道这些漏洞,是要把问题想清楚。
西班牙一见,到现在3个月过去了,开发网又出了好几个版本。没有人利用重力计算的漏洞。大多数人是因为不知道这个漏洞,当然,也有像我们这样的,知道但觉得没有必要破坏网络,影响开发网的正常运行。重要的是这个问题是不是已知的,是不是会被很好地修复。
就如重力计算的问题,后来的0.3.x,0.4.x 版本,这个问题就好像不存在一样。在这两个版本中最关键和最重要的部分是时空证明的逐步实现,期间碰到天花板问题,进一步实现,替换为 Rational PoSt,实现 slashing,PIP等等。这些都是基本功能,但整个网络跑得并不顺利。
尽管如此,我们看到很多新功能的实现和完善。还记得一个多月前在柏林时 Juan Benet 拿出 Filecoin 的模块划分图来征求我们的意见。而目前这些模块的划分和实现也在一步步的实现中。这是一些不小的改变,进展很大,但正因为如此,软件代码改动很大,稳定性存疑。
尽管团队根据当初拜访上海的时候我们的建议增加了 staging 阶段来提高稳定性,但显然staging版本上运行的效果不如预期。考虑到0.5版本已经包含升级的功能,这样,可以在运行中解决问题。0.5版本的用户开发网络如期于 9月25日发布了。
26日,我在云栖大会上听蚂蚁金服的副总姐夫和区块链部门负责人盛楚鼓吹他们如何实现百万级的PPS,正感叹区块链的一千种玩法。一位友商朋友发消息问我,那个攻击节点是不是你们的。
我有点懵,但很快明白,该来的还是来了:重力攻击开始了。不过我申明,我们持有这个武器仅仅维持威慑作用,绝不率先使用重力武器。也不支持不提倡其他人员使用重力武器;并对此表示最强烈的谴责。但是,只要攻击发生,武器就成了明牌,意思不大了,修复也在途中。
9月27日,在与团队沟通后,重现了重力攻击。从这次攻击中,我们很惊喜地发现,当前版本的区块同步速度明显快过之前的版本。说明 Graphsync 和 IPLD Fetcher 的采用起到了很好的作用。
抱歉,本文不涉及攻击手法,也不会详细分析漏洞。关于此漏洞和攻击手法的分析将放到 Filecoin 团队修复问题之后。敬请谅解。
可以肯定地说,不会太久了。因为目前 Filecoin 团队已经做了充分研究,包括实验和参数调整。方案基本已经定型。
方案的实现较目前的方案复杂一些,但实现起来仍然非常简单,也十分容易验证。
大致的公式如下:
也即下一个 tipset 的重量是在上一轮的重量的基础上,增加一个函数值,而这个函数与三个因素有关:
此轮中挖到的区块数量:数量越多,重量越重。这对抗女巫攻击和不协作的矿工有抵制作用;
挖到的区块数量和预期值的比较:对于主动分叉的变相惩罚
在当前高度时的网络总算力值:抗网络分裂,保护FIL的安全性和PoSt的安全性。